#ifndef SIGNAL_SERVER_HPP
#define SIGNAL_SERVER_HPP

#include <asio.hpp>  // 引入 ASIO 网络库
#include <unordered_map>  // 用于存储客户端的 UUID 与其 IP:Port
#include <boost/uuid/uuid.hpp>  // 引入 Boost UUID 库
#include <boost/uuid/uuid_generators.hpp>  // 生成 UUID
#include <boost/uuid/uuid_io.hpp>  // 用于输入输出 Boost UUID
#include <nlohmann/json.hpp>  // 引入 JSON 库

using asio::ip::tcp;  // 使用 TCP 协议
using json = nlohmann::json;  // 定义 JSON 类型

// SignalServer 类声明
class SignalServer {
public:
    // 构造函数：传入 io_context 和端口号
    SignalServer(asio::io_context& io_context, short port);

    // 运行服务器，接受客户端连接
    void run();

private:
    // 处理客户端连接的函数
    void handle_client(tcp::socket socket);

    // 处理客户端注册的函数
    void register_client(const json& request, tcp::socket& socket);

    // 处理客户端查询的函数
    void query_client(const json& request, tcp::socket& socket);

    asio::io_context& io_context_;  // ASIO I/O 上下文，管理异步操作
    tcp::acceptor acceptor_;  // 用于监听端口的接收器
    std::unordered_map<std::string, tcp::endpoint> uuid_registry_;  // 存储 UUID 和客户端 IP:Port
};

#endif // SIGNAL_SERVER_HPP
